home *** CD-ROM | disk | FTP | other *** search
- #include <SpeechRecognition.h>
-
- extern void MyProcessRecognitionResult (SRRecognitionResult recResult);
-
- pascal OSErr MyInstallNotificationCallBack (SRRecognizer recognizer);
- pascal void MyRemoveNotificationCallBack (SRRecognizer recognizer);
- pascal void MyIdleCheckForSpeechResult (void);
-
- pascal void MyNotificationCallBack (SRCallBackStruct *param);
-
-
- SRRecognitionResult gLastRecResult;
-
- pascal OSErr MyInstallNotificationCallBack (SRRecognizer recognizer)
- {
- SRCallBackParam myCallBackPB;
-
- myCallBackPB.callBack = NewSRCallBackProc (MyNotificationCallBack);
-
- return SRSetProperty (recognizer, kSRCallBackParam,
- &myCallBackPB, sizeof (myCallBackPB));
- }
-
- pascal void MyRemoveNotificationCallBack (SRRecognizer recognizer)
- {
- SRCallBackParam myCallBackPB;
- SRCallBackUPP mySavedCallBack;
- Size myLen;
- OSErr myErr = noErr;
-
- myLen = sizeof (myCallBackPB);
- myErr = SRGetProperty (recognizer, kSRCallBackParam, &myCallBackPB, &myLen);
- if (myErr == noErr) {
- if (myCallBackPB.callBack != nil) {
- mySavedCallBack = myCallBackPB.callBack;
-
- myCallBackPB.callBack = nil;
- myErr = SRSetProperty (recognizer, kSRCallBackParam, &myCallBackPB,
- sizeof (myCallBackPB));
-
- DisposeRoutineDescriptor (mySavedCallBack);
- }
- }
- }
-
- pascal void MyNotificationCallBack (SRCallBackStruct * param)
- {
- OSErr myErr = param->status;
-
- if (!myErr) {
- /* Handle recognition beginning event - the user just started speaking */
- /* Here we just continue speech recognition */
- if ((param->what) & kSRNotifyRecognitionBeginning) {
- SRRecognizer rec = (SRRecognizer) (param->instance);
-
- myErr = SRContinueRecognition (rec);
- }
-
- /* Handle recognition done event */
- /* Here we save the rec result in gLastRecResult. */
- /* At idle time in our event loop, if gLastRecResult != NULL, */
- /* we call MyProcessRecognitionResult (gLastRecResult) */
- else if (param->what & kSRNotifyRecognitionDone) {
- SRRecognitionResult recResult =
- (SRRecognitionResult) (param->message);
- if (recResult)
- gLastRecResult = recResult;
- /* Note that we might get more than one result before we */
- /* get to our idle check, so we should really be putting */
- /* this in a queue. */
- }
- }
- }
-
- /* MyIdleCheckForSpeechResult is called in the event loop */
- pascal void MyIdleCheckForSpeechResult (void)
- {
- if (gLastRecResult != NULL)
- MyProcessRecognitionResult (gLastRecResult);
-
- gLastRecResult = NULL;
- }
-